<?php

class DocumentsController extends Controller
{
	/**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
    public $layout='//layouts/sp';
        public $customer;
        public $location;
        public $dispatch;
      
	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions			
				'users'=>array('@'),
			),
		
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}


	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCreate()
	{
		$model=new Documents;
                
                $model->dateadded=date('m-d-Y h:i:s a');                
                $model->addedby=Yii::app()->user->getName();
		
                
		if(isset($_POST) && (isset($_POST['custno']) || isset($_POST['locno']) || isset($_POST['dispatch'])))
		{
                    
			$model->attributes=$_POST;
                        
			if ($model->save()) {
                            echo json_encode(array(
                                'success' => true,
                                'msg' => "Saving successful"
                            ));
                        } else {
                            echo json_encode(array(
                                'success' => false,
                                'errors' => $model->getErrors()
                            ));
                        }
				
		}

	}

	/**
	 * Updates a particular model.
	 * If update is successful, the browser will be redirected to the 'view' page.
	 * @param integer $id the ID of the model to be updated
	 */
	public function actionUpdate()
	{
		
                
		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);
                
		if(isset($_POST) && isset($_POST['id']))
		{
                        $model=Documents::model()->findByPk($_POST['id']);
			$model->attributes=$_POST;
			if ($model->save()) {
                            echo json_encode(array(
                                'success' => true,
                                'msg' => "Saving successful"
                            ));
                        } else {
                            echo json_encode(array(
                                'success' => false,
                                'errors' => $model->getErrors()
                            ));
                        }
			
		}

	}

	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
	
			// we only allow deletion via POST request
			$this->loadModel($id)->delete();
//                        switch($type){
//                        case DOCTYPE_CUST:
//                            break;
//                        case DOCTYPE_LOC:
//                            break;
//                        case DOCTYPE_DISPATCH:
//                            break;
//                        }
//			// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
//			if(!isset($_GET['ajax']))
//				$this->redirect(CHttpRequest::getUrlReferrer());
	
	}

	/**
	 * Lists all models.
	 */
	public function actionIndex($type,$custno=NULL,$locno=NULL,$dispatch=NULL)
	{   
            $this->loadObject($custno, $locno,$dispatch);
            switch($type){
                case DOCTYPE_CUST:
                    $this->render('index',array(
                    'type'=>$type,
                    'customer'=>$this->customer,                    
		));
                    break;
                case DOCTYPE_LOC:
                    $this->render('index',array(
                    'type'=>$type,
                    'customer'=>$this->customer,
                    'location'=>$this->location,
                   
		));
                    break;
                case DOCTYPE_DISPATCH:
                    $this->render('index',array(
                    'type'=>$type,                   
                    'dispatch'=>$this->dispatch,
		));
                    break;
            }
		
	}

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer the ID of the model to be loaded
	 */
	public function loadModel($id)
	{
		$model=Documents::model()->findByPk($id);
        SalesPortalLoginCheckerUtil::canUserAccessCustomer($model);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

	/**
	 * Performs the AJAX validation.
	 * @param CModel the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='documents-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
        
        public function loadObject($custno,$locno,$dispatch){
            if($locno!=NULL)
                $this->location=Locations::model()->find('custno=:custno AND locno=:locno',array(
                    'custno'=>$custno,
                    'locno'=>$locno,
                ));
            if($custno!=NULL){
                $this->customer=Customers::model()->find('custno=:custno',array(
                    'custno'=>$custno,
                ));
                SalesPortalLoginCheckerUtil::canUserAccessCustomer($this->customer);
            }
            if($dispatch!=NULL){
                $this->dispatch=Dispatchdetails::model()->findByPk($dispatch);
                $this->location=Locations::model()->find('custno=:custno AND locno=:locno',array(
                    'custno'=>$this->dispatch->custno,
                    'locno'=>$this->dispatch->locno,
                ));
            }
            
            
        }
        
        public function actionDocumentList($type,$custno=NULL,$locno=NULL,$dispatch=NULL,$page=1,$sort=NULL,$dir=NULL){
            //we decrease $page by 1 because in Extjs first page is 1, but in our sql first page is 0;
            if($page>0)$page--;
            $crit=new CDbCriteria();
            
            if($custno!=NULL && $locno!=NULL){
                $crit->condition='custno=:custno AND locno=:locno';
                $crit->params=array(
                    'custno'=>$custno,
                    'locno'=>$locno,
                );
            }else if($custno!=NULL){
                $crit->condition='custno=:custno AND (locno=null or locno="")';
                $crit->params=array(
                    'custno'=>$custno,                    
                );
            }else if($dispatch!=NULL){
                $crit->condition='dispatch=:value';
                $crit->params=array(
                    'value'=>$dispatch,                    
                );
            }
            
            $order=CJSON::decode($sort);
            if($sort!=NULL){
                $crit->order=$order[0]['property'].' '.$order[0]['direction'];
            }
            $data=new CActiveDataProvider('Documents',array(
                'criteria'=>$crit,
                'pagination'=>array(
                    'pageSize'=>20,
                    'currentPage'=>$page
                )
            ));
            
            if($data!=NULL && count($data->getData())>0){
                $rs=array();
                $rs['totalCount']=$data->getTotalItemCount();
                foreach($data->getData() as $i=>$item){
                    $rs['data'][$i]=$item->getAttributes();
                }
                echo json_encode($rs);
            }
            Yii::app()->end();
        }
        
        public function actionDownload($id){
            $model=$this->loadModel($id);
            Yii::app()->fileHelper->forceDownload('documents/'.$model->filename);
        }
}
